/**
 * 
 */
package com.pe.pgn.clubpgn.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.dao.VentaDao;
import com.pe.pgn.clubpgn.domain.ClpbEstacion;
import com.pe.pgn.clubpgn.domain.ClpbProducto;
import com.pe.pgn.clubpgn.domain.ClpmPromocionConsumo;
import com.pe.pgn.clubpgn.domain.ClpmVenta;
import com.pe.pgn.clubpgn.domain.beans.BNTipoVentaManual;
import com.pe.pgn.clubpgn.domain.beans.BNVentaBusqueda;
import com.pe.pgn.clubpgn.service.VentaService;
import com.pe.pgn.clubpgn.webapp.util.CalendarUtil;

/**
 * @author Edwin Farfan
 *
 */

@SuppressWarnings("unchecked")
@Service("ventaService")
public class VentaServiceImpl implements VentaService{

	@Autowired
	private VentaDao dao;
	
	public List<Map<String, Object>> busquedaClientes(String nroDocumento,
			String nombres,String deCodigoTarjeta) {

		return dao.busquedaClientes(nroDocumento,nombres,deCodigoTarjeta);
	}

	public List<ClpmVenta> obtenerVentasActivas(){
		return dao.obtenerVentasActivas();
	}
	
	public ClpmVenta obtenerVenta(Long id){
		return dao.obtenerVenta(id);
	}
	
	public List<ClpbProducto> listadoProductos(){
		return dao.listadoProductos();
	}
	
	public List<ClpmPromocionConsumo> listadoPromocionConsumo(){
		return dao.listadoPromocionConsumo();
	}
	
	public Map guardarVenta(ClpmVenta venta,boolean anulada) throws Exception{
		return dao.guardarVenta(venta,anulada);
	}
	
	public void eliminarVentaManual(ClpmVenta venta) {
		dao.eliminarVentaManual(venta);
	}
	
	public List<ClpbEstacion> listadoEstaciones(){
		return dao.listadoEstaciones();
	}	

	public List<ClpmVenta> busquedaVentas(BNVentaBusqueda venta) {
		
		return  dao.busquedaVentas(venta.getCoRecibo(),venta.getFechaVentaInicio(),venta.getFechaVentaFin(),venta.getFechaCreacionInicio(),venta.getFechaCreacionFin(),venta.getCoCodeEstacion(),venta.getDePlaca(),venta.getDeCliente(),venta.getCoCodigoTarjetaPersona(),venta.getDeNumeroDocumento());
	}

	public List<BNTipoVentaManual> obtenerTiposVentaManual() {
		return dao.obtenerTiposVentaManual();
	}

	public List<ClpmVenta> listarVentasActivasPorCliente(String coClientePersona){
		return dao.listarVentasActivasPorCliente(coClientePersona);
	}

	public List<ClpmVenta> buscarVentasActivasPorCliente(
			String coClientePersona, String coEstacionID,
			String iniFechaVentaID, String finFechaVentaID, String dePlacaID,
			String vaPrecioVentaIniID, String vaPrecioVentaFinID,
			String stOnlineID, String stVentaID) {
		
		try{
        	CalendarUtil.stringToCalendar(CLPConstantes.DATE_PATTERN, iniFechaVentaID);
        }catch(Exception e){
        	iniFechaVentaID = ""; //entra aca si el parametro dado no es una fecha
        }
        
        try{
        	CalendarUtil.stringToCalendar(CLPConstantes.DATE_PATTERN, finFechaVentaID);
        }catch(Exception e){
        	finFechaVentaID = ""; //entra aca si el parametro dado no es una fecha
        }
		
		return dao.buscarVentasActivasPorCliente(coClientePersona,coEstacionID,iniFechaVentaID,
		finFechaVentaID,dePlacaID,vaPrecioVentaIniID,vaPrecioVentaFinID,stOnlineID,stVentaID);
	}

	public List<ClpbEstacion> listarEstaciones(boolean addItemDefault) {
		return dao.listarEstaciones(addItemDefault);
	}	
}
